package com.huangpeng.designmodel.proxyDutyChain;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * @Author hp
 * @Title 拦截器链类
 * @Package
 * @Date 2021/12/28 16:33
 * @Description
 * @Version 1.0
 */
public class InterceptorChain {
    private List<Interceptor> interceptorList = new ArrayList<>();

    /**
     * 插入所有拦截器
     */
    public Object pluginAll(Object target){
        for(Interceptor interceptor : interceptorList){
            target = interceptor.plugin(target);
        }
        return target;
    }

    /**
     * 添加拦截器到容器
     * @param interceptor
     */
    public void addInterceptor(Interceptor interceptor){
        interceptorList.add(interceptor);
    }

    /**
     * 返回一个不可修改集合，只能通过addInterceptor方法添加
     * 这样控制权就在自己手里
     */
    public List<Interceptor> getInterceptorList(){
        return Collections.unmodifiableList(interceptorList);
    }

}
